package backtracking.括号生成;

//数字 n 代表生成括号的对数，请你设计一个函数，用于能够生成所有可能的并且 有效的 括号组合。
//
//
//
// 示例 1：
//
//
//输入：n = 3
//输出：["((()))","(()())","(())()","()(())","()()()"]
//
//
// 示例 2：
//
//
//输入：n = 1
//输出：["()"]
//
//
//
//
// 提示：
//
//
// 1 <= n <= 8
//
// Related Topics 字符串 回溯算法
// 👍 1638 👎 0


import java.util.ArrayList;
import java.util.List;

//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
    List<String> list = new ArrayList<>();
    private StringBuilder stringBuilder = new StringBuilder();
    public List<String> generateParenthesis(int n) {
        String a[] = new String[n];
        String b[] = new String[n];
        for (int i = 0; i < n; i++) {
            a[i] = "(";
            b[i] = ")";
        }
        findAll(a,0,b,0);
        return list;
    }
    public void findAll(String[] a,int index1,String[] b,int index2){
        if (index1==a.length&&index2==b.length)
            list.add(stringBuilder.toString());
        for (int i = index1; i < a.length; i++) {
            for (int j = index2; j < i; j++) {
                stringBuilder.append(a[i]).append(j);
                findAll(a,i+1,b,j+1);

            }
        }

    }

    public static void main(String[] args) {
        Solution solution = new Solution();
        List<String> a = solution.generateParenthesis(7);
        System.out.println(a.toString());
    }
}
//leetcode submit region end(Prohibit modification and deletion)
